package com.altran.web.utilities;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public final class Utilities {
	
	public Utilities() {}
	
	public static Date calcularSumaDias(Date dia, int numDias) {
		Calendar calendario = Calendar.getInstance();
		
		calendario.setTime(dia);
		calendario.add(Calendar.DATE, numDias);
		calendario.set(Calendar.HOUR_OF_DAY, 0);
		calendario.set(Calendar.MINUTE, 0);
		calendario.set(Calendar.SECOND, 0);
		calendario.set(Calendar.MILLISECOND, 0);

		return calendario.getTime();
	}
	
	public static Date calcularSumaMeses(Date diaActual, int numMeses) {
		Calendar calendario = Calendar.getInstance();
		
		calendario.setTime(diaActual);
		calendario.add(Calendar.MONTH, numMeses);
		calendario.set(Calendar.HOUR_OF_DAY, 0);
		calendario.set(Calendar.MINUTE, 0);
		calendario.set(Calendar.SECOND, 0);
		calendario.set(Calendar.MILLISECOND, 0);

		return calendario.getTime();
	}
	
	public static Date FechaACero(Date fecha){
		Calendar calendario = Calendar.getInstance();
		
		calendario.setTime(fecha);
		calendario.set(Calendar.HOUR_OF_DAY, 0);
		calendario.set(Calendar.MINUTE, 0);
		calendario.set(Calendar.SECOND, 0);
		calendario.set(Calendar.MILLISECOND, 0);

		return calendario.getTime();
	}
	
	public static Date FechaACeroConFormato(Date fecha, String format) {
		
		Date dtInicial = null;
		
		try {
			SimpleDateFormat Sfmt = new SimpleDateFormat(format);
			String fechaFormat = Sfmt.format(fecha);
			
			dtInicial = Sfmt.parse(fechaFormat);

		} catch (ParseException exc) {}
		
		return dtInicial;
	}
	
	public static List<Date> obtenerFechasEntreIntervalo(Date fechaInicio, int numDias) {
		List<Date> fechasIntervalo = new ArrayList<>();
		Calendar calendario = Calendar.getInstance();
		calendario.setTime(fechaInicio);
		fechasIntervalo.add(calendario.getTime());
		
		for (int i = 1; i < numDias; i++) {
			calendario.add(Calendar.DATE, 1);
			fechasIntervalo.add(calendario.getTime());
		}
		return fechasIntervalo;
	}
	
	public static long obtenerNumDiasEntreFechas(Date fechaInicial, Date fechaFinal) {
		
        // Crear 2 instancias de Calendar
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();

        // Establecer las fechas
        cal1.setTime(fechaInicial);
        cal2.setTime(fechaFinal);
        
        // calcular la diferencia en milisengundos
        long diff = cal2.getTimeInMillis() - cal1.getTimeInMillis();

        // calcular la diferencia en dias
        long diffDays = diff / (24 * 60 * 60 * 1000);

		return diffDays;
		
	}
	
}
